home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 015 / prnter_2.arc / NECPRINT.BAS < prev    next >
BASIC Source File  |  1983-01-30  |  14KB  |  409 lines

  1.  
  2. 10 REM NECPRINT - - A texteditor for the NEC PC-8023A printer
  3. 20 REM written by Hal R. Varian, 1114 Woodlawn Avenue, Ann Arbor, MI 48104
  4. 30 REM  Copyright (c) 1982 by Hal R. Varian
  5. 40 DEFINT A-Z
  6. 50 REM greek characters and other special symbols
  7. 60 ALPHA$ = CHR$(192)
  8. 70 BETA$ = CHR$(195)
  9. 80 DELTA$ = CHR$(189)
  10. 90 PI$ = CHR$(202)
  11. 100 CAPSIGMA$ = CHR$(191)
  12. 110 PART$ = CHR$(159)
  13. 120 LAMBDA$ = CHR$(222)
  14. 130 TAU$ = CHR$(207)
  15. 140 APPROX$ = CHR$(210)
  16. 150 RHO$ = CHR$(183)
  17. 160 ETA$ = CHR$(197)
  18. 170 INFINITY$ = CHR$(176)
  19. 180 IOTA$ = CHR$(215)
  20. 190 GAMMA$ = CHR$(178)
  21. 200 EPSILON$ = CHR$(182)
  22. 210 RHO$ = CHR$(183)
  23. 220 PHI$ = CHR$(216)
  24. 230 SIGMA$ = CHR$(184)
  25. 240 NU$ = CHR$(193)
  26. 250 OMEGA$ = CHR$(209)
  27. 260 MU$ = CHR$(223)
  28. 270 KAPPA$ = CHR$(190)
  29. 280 XI$ = CHR$(196)
  30. 290 UPSILON$ = CHR$(201)
  31. 300 CAPLAMBDA$ = CHR$(203)
  32. 310 RADICAL$ = CHR$(211)
  33. 320 IOTA$ = CHR$(215)
  34. 330 CHI$ = CHR$(218)
  35. 340 ZETA$ = CHR$(221)
  36. 350 CAPDELTA$ = CHR$(194)
  37. 360 INTEGRAL$ = CHR$(242)
  38. 370 RTARROW$ = CHR$(171)
  39. 380 PSI$ = CHR$(185)
  40. 390 CAPOMEGA$ = CHR$(186)
  41. 400 CAPGAMMA$ = CHR$(187)
  42. 410 REM  printer control strings
  43. 420 FORMFEED$ = CHR$(&H1F)+CHR$(1)
  44. 430 PROG$="NECPRINT v. 2.0 June, 1982"
  45. 440 ESC$ = CHR$(27)
  46. 450 CONDENSEON$ = ESC$+CHR$(&H51)
  47. 460 ENHANCEOFF$ = ESC$+CHR$(&H22)
  48. 470 ENHANCEON$ = ESC$+"!"
  49. 480 ELITEON$ = ESC$+CHR$(&H45)
  50. 490 PROPORTION$ = ESC$+CHR$(&H50)
  51. 500 LARGEON$ = CHR$(&HE)
  52. 510 LARGEOFF$ = CHR$(&HF)
  53. 520 UNDERLINEON$ = ESC$+CHR$(&H58)
  54. 530 UNDERLINEOFF$ = ESC$+CHR$(&H59)
  55. 540 PICAON$ = ESC$+CHR$(&H4E)
  56. 550 FORWARD$=ESC$+"f"
  57. 560 REVERSE$=ESC$+"r"
  58. 570 INCREM$ = ESC$+CHR$(&H5B)
  59. 580 SEEK$ = ESC$+CHR$(&H5D)
  60. 590 SINGLE$ = ESC$+"A"
  61. 600 CLRLPT$=ENHANCEOFF$+LARGEOFF$+UNDERLINEOFF$+PICAON$+ESC$+"L"+"005"+SINGLE$+SEEK$+FORWARD$
  62. 610 REM  begin main program execution
  63. 620 REM clear printer
  64. 630 GOSUB 1800
  65. 640 REM
  66. 650 REM
  67. 660 REM *** Initial Menu ***
  68. 670 KEY OFF: CLS: SCREEN 0,0,0
  69. 680 PRINT PROG$: PRINT "Copyright (C) 1982 by Hal R. Varian":PRINT:PRINT
  70. 690 PRINT "Functions"
  71. 700 PRINT TAB(13);"P - Print a text file"
  72. 710 PRINT TAB(13);"Q - Quit and return to DOS"
  73. 720 PRINT TAB(13);"R - Reset printer"
  74. 730 PRINT TAB(13);"S - Set up printer"
  75. 740 PRINT TAB(13);"T - Advance paper to top"
  76. 750 PRINT TAB(13);"X - Exit to BASIC"
  77. 760 NEXTLN = CSRLIN+1
  78. 770 PLOC = NEXTLN: GOSUB 2110 'clear next line
  79. 780 INPUT "Enter function:  ", X$: IF X$="" THEN BEEP: GOTO 770
  80. 790 GOSUB 2040  'capitalize x$
  81. 800 X = INSTR("PSRTQX",X$): IF X = 0 THEN BEEP: GOTO 770
  82. 810 ON X GOSUB 840,1370,1800,1920,1960,2000
  83. 820 GOTO 660  'present menu again
  84. 830 REM
  85. 840 REM print a text file
  86. 850 CLS
  87. 860 PRINT PROG$: PRINT
  88. 870 PRINT "Adjust the paper in the printer so that"
  89. 880 PRINT "the perforation is at the top of the print head."
  90. 890 PRINT
  91. 900 PRINT "Enter the exact filename.":PRINT
  92. 910 PRINT "Depress the RETURN key to begin printing."
  93. 920 PRINT "Enter a blank line to return to menu."
  94. 930 PRINT "Depress ESC key to abort printing."
  95. 940 PRINT
  96. 950 INPUT "Name of file to print:   ",X$
  97. 960 IF LEN(X$) = 0 THEN RETURN
  98. 970 GOSUB 2040 ' capitalize x$
  99. 980 WIDTH "lpt1:", PWIDTH
  100. 990 OPEN X$ FOR INPUT AS 1
  101. 1000 PAGENR = STPAGE
  102. 1010 LINENR = 1
  103. 1020 IF EOF (1) THEN 1210
  104. 1030 LINE INPUT #1, L$
  105. 1040 REM see if this is correct place to start if sflg is set
  106. 1050 IF SFLG = 1 THEN SPLC=INSTR(L$,SLINE$): IF SPLC = 0 THEN GOTO 1020              ELSE SFLG = 0
  107. 1060 REM check for Greek characters,super and subscripts, and underlines
  108. 1070 GOSUB 2530 : GOSUB 3020: GOSUB 3570
  109. 1080 REM check if this string is a page control string
  110. 1090 IF LEFT$(L$,1)="#" THEN GOSUB 2240: GOTO 1020
  111. 1100 IF LINENR = 1 THEN GOSUB 1250 'print page heading
  112. 1110 LPRINT L$; 'print line
  113. 1120 REM print superscripts and subscripts if necessary
  114. 1130 IF SUPFLG = 1 THEN GOSUB 3320
  115. 1140 IF SUBFLG = 1 THEN GOSUB 3440
  116. 1150 IF INKEY$=ESC$ THEN 1210  'abort print if <esc> key is pressed
  117. 1160 LPRINT:IF SPACING = 2 THEN LPRINT
  118. 1170 LINENR = LINENR + SPACING
  119. 1180 IF LINENR > PLENGTH THEN LINENR = 1
  120. 1190 GOTO 1020
  121. 1200 REM
  122. 1210 REM  Close file and return
  123. 1220 CLOSE
  124. 1230 GOTO 950
  125. 1240 REM
  126. 1250 REM Print page heading
  127. 1260 IF PAGENR <> STPAGE THEN LPRINT FORMFEED$;
  128. 1270 PAGENR = PAGENR + 1
  129. 1280 LPRINT:LPRINT
  130. 1290 LPRINT UNDERLINEOFF$; 'turn off underline
  131. 1300 IF HEADFLG = 1 AND PAGENR <> 1 THEN LPRINT X$; TAB(33);"-";PAGENR;"-";TAB(60);DATE$
  132. 1310 IF HEADFLG = 0 AND PAGENR <> 1 THEN LPRINT TAB(34);"-";PAGENR;"-"
  133. 1320 IF UNDERLINE = 1 THEN LPRINT UNDERLINEON$;
  134. 1330 LPRINT: LPRINT
  135. 1340 LINENR = 1
  136. 1350 RETURN
  137. 1360 REM
  138. 1370 REM Set printer controls
  139. 1380 CLS: PRINT PROG$
  140. 1390 PRINT: PRINT "Printer options available: "
  141. 1400 PRINT
  142. 1410 PRINT "    A  - Line spacing of 1/6 inch"
  143. 1420 PRINT "    B  - Line spacing of 1/8 inch"
  144. 1430 PRINT "    C  - Condensed Print"
  145. 1440 PRINT "    D  - Double Spaced"
  146. 1450 PRINT "    E  - Enhanced Print"
  147. 1460 PRINT "    G  - Set Page Length"
  148. 1470 PRINT "    H  - Print header on each page"
  149. 1480 PRINT "    I  - Incremental Mode"
  150. 1490 PRINT "    L  - Large Print"
  151. 1500 PRINT "    M  - Set Left Margin"
  152. 1510 PRINT "    P  - Pica Print"
  153. 1520 PRINT "    R  - Proportional Print"
  154. 1530 PRINT "    S  - Start at line other than first"
  155. 1540 PRINT "    T  - Elite Print"
  156. 1550 PRINT
  157. 1560 PRINT
  158. 1570 INPUT "   Enter desired options:   ",O$
  159. 1580 X$=O$: GOSUB 2040: O$=X$  'capitalize
  160. 1590 LPRINT CLRLPT$; 'clear line printer
  161. 1600 IF INSTR(O$,"A") THEN LPRINT ESC$+"A";
  162. 1610 IF INSTR(O$,"B") THEN LPRINT ESC$+"B";
  163. 1620 IF INSTR(O$,"R") THEN LPRINT PROPORTION$;
  164. 1630 IF INSTR(O$,"C") THEN LPRINT CONDENSEON$; CHR$(&H1B);"B";: PWIDTH = 132
  165. 1640 IF INSTR(O$,"E") THEN LPRINT ENHANCEON$;
  166. 1650 IF INSTR(O$,"L") THEN LPRINT LARGEON$;
  167. 1660 IF INSTR(O$,"P") THEN LPRINT PICAON$;
  168. 1670 IF INSTR(O$,"M") THEN GOSUB 2170
  169. 1680 IF INSTR(O$,"D") THEN SPACING = 2
  170. 1690 IF INSTR(O$,"I") THEN LPRINT INCREM$;
  171. 1700 IF INSTR(O$,"T") THEN LPRINT ELITEON$;
  172. 1710 IF INSTR(O$,"G") THEN GOSUB 3930
  173. 1720 IF INSTR(O$,"F") THEN FEEDFLG = 1
  174. 1730 IF INSTR(O$,"S") THEN GOSUB 3960
  175. 1740 IF INSTR(O$,"H") THEN HEADFLG = 1
  176. 1750 PRINT
  177. 1760 PLOC=CSRLIN
  178. 1770 GOSUB 2110
  179. 1780 RETURN
  180. 1790 REM
  181. 1800 REM  set printer to defaults
  182. 1810 PWIDTH = 80
  183. 1820 PLENGTH = 53
  184. 1830 PAGENR = 0
  185. 1840 UNDERLINE = 0
  186. 1850 HEADFLG = 0
  187. 1860 SFLG=0
  188. 1870 SPACING = 1
  189. 1880 LPRINT CLRLPT$;
  190. 1890 STPAGE = 0
  191. 1900 RETURN
  192. 1910 REM
  193. 1920 REM Form feed to printer
  194. 1930 LPRINT FORMFEED$
  195. 1940 RETURN
  196. 1950 REM
  197. 1960 REM  Quit and return to DOS
  198. 1970 CLS
  199. 1980 SYSTEM
  200. 1990 REM
  201. 2000 REM *** Exit to BASIC
  202. 2010 CLS
  203. 2020 END
  204. 2030 REM
  205. 2040 REM Capitalize string in X$
  206. 2050 FOR X = 1 TO LEN(X$)
  207. 2060 XC$ = MID$(X$,X,1)
  208. 2070 IF "a" <=XC$ AND XC$ <= "z" THEN MID$(X$,X,1)=CHR$(ASC(XC$) - 32)
  209. 2080 NEXT X
  210. 2090 RETURN
  211. 2100 REM
  212. 2110 REM position at line number ploc and clear it
  213. 2120 LOCATE PLOC,1
  214. 2130 PRINT STRING$(40," ")
  215. 2140 LOCATE PLOC,1
  216. 2150 RETURN
  217. 2160 REM
  218. 2170 REM Set left margin
  219. 2180 PRINT: PRINT "Margin width is entered in 3 digits"
  220. 2190 PRINT "Example: 005"
  221. 2200 INPUT "Desired margin width";MARGIN$
  222. 2210 LPRINT ESC$+"L"+MARGIN$;
  223. 2220 RETURN
  224. 2230 REM
  225. 2240 REM page control subroutine
  226. 2250 REM is this a formfeed record?2260 PSN = INSTR(L$,"#F")
  227. 2270 IF PSN <> 1 GOTO 2300
  228. 2280 L$ = MID$(L$,3): GOSUB 1250:LINENR = 2:RETURN
  229. 2290 REM is this a header record?2300 PSN = INSTR(L$,"#*")
  230. 2310 IF PSN = 0 GOTO 2360
  231. 2320 PSN = PSN+2
  232. 2330 X$=MID$(L$,PSN)
  233. 2340 GOSUB 1250:RETURN
  234. 2350 REM is this a center/title record?2360 PSN = INSTR(L$,"#=")
  235. 2370 IF PSN= 0 GOTO 2440
  236. 2380 REM find the | marks which indicate <cr>
  237. 2390 BEGIN=3
  238. 2400 PSN=INSTR(BEGIN,L$,"|")
  239. 2410 IF PSN=0 THEN TITLE$=MID$(L$,BEGIN): GOSUB 2460: RETURN
  240. 2420 LNG = PSN-BEGIN:TITLE$=MID$(L$,BEGIN,LNG):GOSUB 2460: BEGIN=PSN+1
  241. 2430 GOTO 2400
  242. 2440 RETURN 'more page control commands can be added here
  243. 2450 REM
  244. 2460 REM center title and print it out
  245. 2470 LNG=LEN(TITLE$)
  246. 2480 SKIP = (PWIDTH - LNG)/2  - 2
  247. 2490 LPRINT TAB(SKIP);TITLE$
  248. 2500 LINENR=LINENR+1
  249. 2510 RETURN
  250. 2520 REM
  251. 2530 REM See if there are special characters in string
  252. 2540 STRT = 1
  253. 2550 PSN = INSTR(STRT,L$,"&")
  254. 2560 IF PSN = 0 THEN RETURN
  255. 2570 IF PSN = 1 THEN GOTO 2590 'can't be literal
  256. 2580 IF MID$(L$,PSN-1,1) = "!" THEN L$=MID$(L$,1,PSN-2)+MID$(L$,PSN): STRT = PSN + 1: GOTO 2550 'if preceded by ! take no action
  257. 2590 L$ = MID$(L$,1,PSN-1)+MID$(L$,PSN+1) 'eliminate &
  258. 2600 REM find the Greek character in list
  259. 2610 CHAR$ = MID$(L$,PSN,1)
  260. 2620 IF CHAR$ = "a" THEN CHAR$ = ALPHA$
  261. 2630 IF CHAR$ = "b" THEN CHAR$ = BETA$
  262. 2640 IF CHAR$ = "p" THEN CHAR$ = PI$
  263. 2650 IF CHAR$ = "d" THEN CHAR$ = DELTA$
  264. 2660 IF CHAR$ = "S" THEN CHAR$ = CAPSIGMA$
  265. 2670 IF CHAR$ = "`" THEN CHAR$ = PART$
  266. 2680 IF CHAR$ = "l" THEN CHAR$ = LAMBDA$
  267. 2690 IF CHAR$ = "i" THEN CHAR$ = IOTA$
  268. 2700 IF CHAR$ = "t" THEN CHAR$ = TAU$
  269. 2710 IF CHAR$ = "r" THEN CHAR$ = RHO$
  270. 2720 IF CHAR$ = "h" THEN CHAR$ = ETA$
  271. 2730 IF CHAR$ = "~" THEN CHAR$ = APPROX$
  272. 2740 IF CHAR$ = "-" THEN CHAR$ = INFINITY$
  273. 2750 IF CHAR$ = "g" THEN CHAR$ = GAMMA$
  274. 2760 IF CHAR$ = "e" THEN CHAR$ = EPSILON$
  275. 2770 IF CHAR$ = "r" THEN CHAR$ = RHO$
  276. 2780 IF CHAR$ = "s" THEN CHAR$ = SIGMA$
  277. 2790 IF CHAR$ = "n" THEN CHAR$ = NU$
  278. 2800 IF CHAR$ = "m" THEN CHAR$ = MU$
  279. 2810 IF CHAR$ = "D" THEN CHAR$ = CAPDELTA$
  280. 2820 IF CHAR$ = "w" THEN CHAR$ = OMEGA$
  281. 2830 IF CHAR$ = "k" THEN CHAR$ = KAPPA$
  282. 2840 IF CHAR$ = "x" THEN CHAR$ = XI$
  283. 2850 IF CHAR$ = "u" THEN CHAR$ = UPSILON$
  284. 2860 IF CHAR$ = "L" THEN CHAR$ = CAPLAMBDA$
  285. 2870 IF CHAR$ = "f" THEN CHAR$ = PHI$
  286. 2880 IF CHAR$ = "j" THEN CHAR$ = INTEGRAL$
  287. 2890 IF CHAR$ = "/" THEN CHAR$ = RTARROW$
  288. 2900 IF CHAR$ = "y" THEN CHAR$ = PSI$
  289. 2910 IF CHAR$ = "W" THEN CHAR$ = CAPOMEGA$
  290. 2920 IF CHAR$ = "z" THEN CHAR$ = ZETA$
  291. 2930 IF CHAR$ = "J" THEN CHAR$ = RADICAL$
  292. 2940 IF CHAR$ = "i" THEN CHAR$ = IOTA$
  293. 2950 IF CHAR$ = "c" THEN CHAR$ = CHI$
  294. 2960 IF CHAR$ = "G" THEN CHAR$ = CAPGAMMA$
  295. 2970 REM More character's can be added here
  296. 2980 MID$(L$,PSN,1) = CHAR$ 'substitute Greek character
  297. 2990 GOTO 2550  'check for more Greek characters
  298. 3000 RETURN
  299. 3010 REM
  300. 3020 REM check for superscripts
  301. 3030 SUPFLG = 0
  302. 3040 SUPER$ = SPACE$(PWIDTH) ' this will contain the superscripts
  303. 3050 STRT = 1
  304. 3060 PSN = INSTR(STRT,L$,"$")
  305. 3070 IF PSN = 0 GOTO 3160
  306. 3080 IF PSN=1 GOTO 3100
  307. 3090 IF MID$(L$,PSN-1,1) = "!" THEN L$=MID$(L$,1,PSN-2)+MID$(L$,PSN): STRT = PSN + 1: GOTO 3060 ' ignore if preceded by !
  308. 3100 IF MID$(L$,PSN+1,1) = "(" THEN GOSUB 3710: GOTO 3060 'if more than one superscript goto subroutine 3790
  309. 3110 MID$(SUPER$,PSN,1) = MID$(L$,PSN+1,1)
  310. 3120 L$ = MID$(L$,1,PSN-1) + SPACE$(1) + MID$(L$,PSN+2)
  311. 3130 SUPFLG = 1
  312. 3140 GOTO 3060
  313. 3150 REM
  314. 3160 REM check for subscripts
  315. 3170 SUBFLG = 0
  316. 3180 SUB$ = SPACE$(PWIDTH)
  317. 3190 STRT = 1
  318. 3200 PSN = INSTR(STRT,L$,"@")
  319. 3210 IF PSN = 0 THEN RETURN
  320. 3220 IF PSN = 1 THEN 3240
  321. 3230 IF MID$(L$,PSN-1,1) = "!" THEN L$=MID$(L$,1,PSN-2)+MID$(L$,PSN): STRT = PSN + 1: GOTO 3200
  322. 3240 IF MID$(L$,PSN+1,1) = "(" THEN GOSUB 3770: GOTO 3200
  323. 3250 MID$(SUB$,PSN,1) = MID$(L$,PSN+1,1)
  324. 3260 L$ = MID$(L$,1,PSN-1) + SPACE$(1) + MID$(L$,PSN+2)
  325. 3270 SUPER$ = MID$(SUPER$,1,PSN-1) + SPACE$(1) + MID$(SUPER$,PSN+2)
  326. 3280 SUBFLG = 1
  327. 3290 GOTO 3200
  328. 3300 REM
  329. 3310 REM
  330. 3320 REM print superscripts
  331. 3330 SCRIPT$ = SUPER$:GOSUB 4020:SUPER$ = SCRIPT$ 'truncate trailing blanks
  332. 3340 LPRINT INCREM$; 'switch into incremental mode
  333. 3350 LPRINT ESC$;"T";"18"; 'set line spacing
  334. 3360 LPRINT REVERSE$
  335. 3370 LPRINT SUPER$;
  336. 3380 LPRINT FORWARD$
  337. 3390 LPRINT ESC$+"A"; 'return to standard spacing
  338. 3400 SUPFLG = 0
  339. 3410 LPRINT SEEK$; 'return to logic seeking mode
  340. 3420 RETURN
  341. 3430 REM
  342. 3440 REM print subscripts
  343. 3450 SCRIPT$ = SUB$:GOSUB 4020:SUB$ = SCRIPT$ 'truncate trailing blanks
  344. 3460 LPRINT INCREM$; 'switch to incremental mode
  345. 3470 LPRINT ESC$;"T";"13";  'set line spacing
  346. 3480 LPRINT FORWARD$
  347. 3490 LPRINT SUB$;
  348. 3500 LPRINT REVERSE$
  349. 3510 LPRINT FORWARD$;
  350. 3520 LPRINT ESC$+"A"; 'return to standard spacing
  351. 3530 SUBFLG = 0
  352. 3540 LPRINT SEEK$;  'return to logic seeking mode
  353. 3550 RETURN
  354. 3560 REM
  355. 3570 REM underline routine
  356. 3580 STRT = 1
  357. 3590 PSN = INSTR(STRT,L$,"_")
  358. 3600 IF PSN = 0 THEN RETURN
  359. 3610 IF PSN = 1 THEN 3630  ' cannot be literal if in position 1
  360. 3620 IF MID$(L$,PSN-1,1) = "!" THEN L$=MID$(L$,1,PSN-2)+MID$(L$,PSN): STRT = PSN+1: GOTO 3590
  361. 3630 IF UNDERLINE = 0 THEN L$=MID$(L$,1,PSN-1)+UNDERLINEON$+MID$(L$,PSN+1):UNDERLINE=1:GOSUB 3660:GOTO 3590
  362. 3640 IF UNDERLINE = 1 THEN L$=MID$(L$,1,PSN-1)+UNDERLINEOFF$+MID$(L$,PSN+1):UNDERLINE = 0: GOSUB 3660: GOTO 3590
  363. 3650 REM
  364. 3660 REM fix the spacing in super$ and sub$
  365. 3670 SUPER$ = MID$(SUPER$,1,PSN-1)+MID$(SUPER$,PSN+1)
  366. 3680 SUB$ = MID$(SUB$,1,PSN-1)+MID$(SUB$,PSN+1)
  367. 3690 RETURN
  368. 3700 REM
  369. 3710 REM handle more than one superscript
  370. 3720 GOSUB 3840
  371. 3730 MID$(SUPER$,PSN,NCHAR) = MID$(L$,PSN+2,NCHAR)
  372. 3740 L$ = MID$(L$,1,PSN-1) + SPACE$(NCHAR) + MID$(L$,PSN+NCHAR+3)
  373. 3750 SUPFLG = 1
  374. 3760 RETURN
  375. 3770 REM handle more than one subscript
  376. 3780 GOSUB 3840
  377. 3790 MID$(SUB$,PSN,NCHAR) = MID$(L$,PSN+2,NCHAR)
  378. 3800 L$ = MID$(L$,1,PSN-1) + SPACE$(NCHAR) + MID$(L$,PSN+NCHAR+3)
  379. 3810 SUPER$ = MID$(SUPER$,1,PSN-1) + SPACE$(NCHAR) + MID$(SUPER$,PSN+NCHAR+3)
  380. 3820 SUBFLG = 1
  381. 3830 RETURN
  382. 3840 REM count characters between two parentheses
  383. 3850 PAR% = 1
  384. 3860 PLACE = PSN + 2
  385. 3870 IF PLACE > 80 THEN NCHAR = 2:RETURN  'error
  386. 3880 IF MID$(L$,PLACE,1) = ")" THEN PAR% = PAR% - 1
  387. 3890 IF MID$(L$,PLACE,1) = "(" THEN PAR% = PAR% + 1
  388. 3900 IF PAR% <> 0 THEN PLACE = PLACE + 1: GOTO 3870
  389. 3910 NCHAR = PLACE - PSN - 2
  390. 3920 RETURN
  391. 3930 REM set page length
  392. 3940 PRINT: INPUT "Page length in lines"; PLENGTH
  393. 3950 RETURN
  394. 3960 REM setup for starting place other than line 1, page 1
  395. 3970 SFLG = 1
  396. 3980 CLS
  397. 3990 INPUT "Starting page number";STPAGE: STPAGE = STPAGE - 1
  398. 4000 INPUT "Starting string";SLINE$
  399. 4010 RETURN
  400. 4020 REM truncate blanks at end of script$
  401. 4030 LENGTH = LEN(SCRIPT$) - 1
  402. 4040 IF RIGHT$(SCRIPT$,1) = " " THEN SCRIPT$ = LEFT$(SCRIPT$,LENGTH): GOTO 4030
  403. 4050 RETURN
  404. 4060 REM end of program
  405. 65399 '** DONE - PRESS ENTER TO RETURN TO MENU **
  406. $ = LEFT$(SCRIPT$,LENGTH): GOTO 4030
  407. 4050 RETURN
  408. 4060 REM end of program
  409. 65399 '** DONE - PRESS ENTER TO RETURN